//+------------------------------------------------------------------+
//|             ChartObjectsTxtControls.mqh MQL5 文本控件头文件       |
//|                版权所有 2000-2025, MetaQuotes Ltd.              |
//|                        官方网址: https://www.mql5.com            |
//+------------------------------------------------------------------+
//| 包含所有图表文本交互控件类（基础文本、标签、输入框、按钮、矩形标签）     |
//+------------------------------------------------------------------+
#include "ChartObject.h"  // 引入图表对象基类 CChartObject（提供通用属性与生命周期管理）

//+------------------------------------------------------------------+
//| 继承层级说明：                                                   |
//| CChartObject → CChartObjectText（基础文本）→ CChartObjectLabel（固定标签）→ 分支： |
//|  1. CChartObjectEdit（文本输入框）→ CChartObjectButton（交互按钮）   |
//|  2. CChartObjectRectLabel（矩形标签）                              |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| CChartObjectText 类（基础文本对象）                              |
//| 功能：MQL5 图表基础文本工具，用于在指定 K 线位置添加可自定义样式的文本标注 |
//| 继承关系：public CChartObject（基于基础图表对象类，扩展文本特有属性）    |
//| 核心特性：                                                      |
//|  1. 绑定 K 线坐标：文本位置由时间（Time）和价格（Price）确定，随图表缩放移动 |
//|  2. 样式高度自定义：支持字体、字号、旋转角度、锚点对齐等样式调整          |
//|  3. 基础文本功能：无交互能力，仅用于静态标注（如交易信号说明、价格注释）    |
//+------------------------------------------------------------------+
class CChartObjectText : public CChartObject
  {
public:
   /**
    * @brief 构造函数：初始化基础文本对象
    * @details 调用父类 CChartObject 构造函数，初始化文本对象的基础属性（未绑定图表）
    */
                     CChartObjectText(void);

   /**
    * @brief 析构函数：销毁基础文本对象
    * @details 依赖父类析构逻辑，自动删除图表上的文本对象，释放资源
    */
                    ~CChartObjectText(void);

   //--- 文本样式特有属性接口
   /**
    * @brief 获取文本旋转角度
    * @return double - 旋转角度（单位：度，范围 -180°~180°，0° 为水平正向，正值顺时针旋转）
    */
   double            Angle(void) const;

   /**
    * @brief 设置文本旋转角度
    * @param angle [in] 新旋转角度（建议范围 -90°~90°，避免过度旋转导致可读性下降）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              Angle(const double angle) const;

   /**
    * @brief 获取文本使用的字体名称
    * @return string - 字体名称（如 "Arial"、"Microsoft YaHei"，为空字符串表示使用默认字体）
    */
   string            Font(void) const;

   /**
    * @brief 设置文本使用的字体
    * @param font [in] 新字体名称（需确保图表所在系统已安装该字体，否则使用默认字体）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              Font(const string font) const;

   /**
    * @brief 获取文本字号
    * @return int - 字号（单位：磅，默认通常为 8~12 磅）
    */
   int               FontSize(void) const;

   /**
    * @brief 设置文本字号
    * @param size [in] 新字号（建议范围 6~20 磅，过小影响可读性，过大遮挡图表数据）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              FontSize(const int size) const;

   /**
    * @brief 获取文本锚点对齐方式（文本相对于坐标点的对齐位置）
    * @return ENUM_ANCHOR_POINT - 锚点枚举值（如 ANCHOR_LEFT_UPPER 表示左上对齐，ANCHOR_CENTER 表示居中对齐）
    */
   ENUM_ANCHOR_POINT Anchor(void) const;

   /**
    * @brief 设置文本锚点对齐方式
    * @param anchor [in] 新锚点（需为 ENUM_ANCHOR_POINT 枚举值，控制文本与坐标点的相对位置）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    * @note 例如：ANCHOR_CENTER 使文本中心与 (Time, Price) 坐标点重合，ANCHOR_RIGHT_LOWER 使文本右下角对齐坐标点
    */
   bool              Anchor(const ENUM_ANCHOR_POINT anchor) const;

   //--- 基础文本创建接口
   /**
    * @brief 在指定图表创建基础文本对象（绑定到 K 线坐标）
    * @param chart_id [in] 目标图表 ID（0 表示当前图表，可通过 ChartID() 获取）
    * @param name [in] 文本对象唯一名称（图表内不可重复）
    * @param window [in] 子窗口编号（0=主窗口，≥1=指标子窗口）
    * @param time [in] 文本绑定的 K 线时间（如 D'2024.01.01'，文本随该 K 线移动）
    * @param price [in] 文本绑定的价格坐标（如 1.20000，文本垂直位置对应此价格）
    * @return bool - 操作结果：true 表示创建成功（对象创建+绑定完成），false 表示失败
    * @note 创建后需通过父类 Description() 方法设置文本内容（如 text_obj.Description("Buy Signal")）
    */
   bool              Create(long chart_id,const string name,const int window,const datetime time,const double price);

   /**
    * @brief 获取基础文本对象类型（MQL5 预定义类型）
    * @return int - 对象类型标识（返回 OBJ_TEXT，代表基础文本对象）
    */
   virtual int       Type(void) const override { return(OBJ_TEXT); }

   //--- 序列化接口（重写基类方法，扩展文本样式属性的读写）
   /**
    * @brief 将文本参数（含样式属性）保存到文件
    * @param file_handle [in] 文件句柄（需提前以 FILE_WRITE 模式打开）
    * @return bool - 操作结果：true 表示保存成功，false 表示失败（文件无效/未绑定图表）
    * @note 保存内容：基类通用属性 + 旋转角度（Angle） + 字体（Font） + 字号（FontSize） + 锚点（Anchor）
    */
   virtual bool      Save(const int file_handle) override;

   /**
    * @brief 从文件加载文本参数（含样式属性）
    * @param file_handle [in] 文件句柄（需提前以 FILE_READ 模式打开）
    * @return bool - 操作结果：true 表示加载成功，false 表示失败（文件无效/未绑定图表）
    */
   virtual bool      Load(const int file_handle) override;
  };

//+------------------------------------------------------------------+
//| CChartObjectLabel 类（固定标签对象）                              |
//| 功能：MQL5 图表固定标签工具，用于在屏幕固定位置添加文本标注（不随图表缩放移动） |
//| 继承关系：public CChartObjectText（基于基础文本类，扩展固定位置属性）    |
//| 核心特性：                                                      |
//|  1. 固定屏幕位置：由基准角（Corner）和 X/Y 距离（Distance）确定，不随图表缩放变化 |
//|  2. 继承文本样式：复用基础文本的字体、字号、锚点等样式属性              |
//|  3. 禁止坐标修改：屏蔽基础文本的 Time/Price 坐标修改接口，强制固定位置    |
//|  4. 静态标注场景：适用于图表标题、图例说明、固定提示信息（如“支撑位区间”）  |
//+------------------------------------------------------------------+
class CChartObjectLabel : public CChartObjectText
  {
public:
   /**
    * @brief 构造函数：初始化固定标签对象
    * @details 调用父类 CChartObjectText 构造函数，继承文本样式属性，初始化固定位置相关属性
    */
                     CChartObjectLabel(void);

   /**
    * @brief 析构函数：销毁固定标签对象
    * @details 依赖父类析构逻辑，自动删除图表上的标签对象，释放资源
    */
                    ~CChartObjectLabel(void);

   //--- 固定位置特有属性接口
   /**
    * @brief 获取标签相对于基准角的 X 方向距离（屏幕像素）
    * @return int - X 距离（像素，从基准角向右的距离）
    */
   int               X_Distance(void) const;

   /**
    * @brief 设置标签相对于基准角的 X 方向距离
    * @param X [in] 新 X 距离（像素，建议根据图表尺寸设置，如 10 表示距离基准角右侧 10 像素）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              X_Distance(const int X) const;

   /**
    * @brief 获取标签相对于基准角的 Y 方向距离（屏幕像素）
    * @return int - Y 距离（像素，从基准角向下的距离）
    */
   int               Y_Distance(void) const;

   /**
    * @brief 设置标签相对于基准角的 Y 方向距离
    * @param Y [in] 新 Y 距离（像素，如 10 表示距离基准角下方 10 像素）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              Y_Distance(const int Y) const;

   /**
    * @brief 获取标签的实际宽度（由文本内容和样式决定，只读）
    * @return int - 宽度（像素，0 表示未设置文本或获取失败）
    */
   int               X_Size(void) const;

   /**
    * @brief 获取标签的实际高度（由文本内容和样式决定，只读）
    * @return int - 高度（像素，0 表示未设置文本或获取失败）
    */
   int               Y_Size(void) const;

   /**
    * @brief 获取标签的基准角（屏幕参考角，决定距离的计算原点）
    * @return ENUM_BASE_CORNER - 基准角枚举值（如 CORNER_LEFT_UPPER 表示左上角，CORNER_RIGHT_LOWER 表示右下角）
    */
   ENUM_BASE_CORNER  Corner(void) const;

   /**
    * @brief 设置标签的基准角
    * @param corner [in] 新基准角（需为 ENUM_BASE_CORNER 枚举值）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    * @note 基准角改变后，X/Y 距离的参考原点也会变化（如左上角→右上角，X 距离从“向右”变为“向左”）
    */
   bool              Corner(const ENUM_BASE_CORNER corner) const;

   //--- 禁止 Time/Price 坐标修改（重写父类方法，屏蔽功能）
   /**
    * @brief 禁止获取时间坐标（固定标签不绑定 K 线时间，此方法仅返回父类默认值）
    * @param point [in] 无效参数（固定标签仅有一个锚点，参数无意义）
    * @return datetime - 父类默认时间值（无实际意义）
    */
   datetime          Time(const int point) const { return(CChartObjectText::Time(point)); }

   /**
    * @brief 禁止设置时间坐标（固定标签位置由屏幕像素决定，此方法始终返回 false）
    * @param point [in] 无效参数
    * @param time [in] 无效参数
    * @return bool - 操作结果：始终返回 false
    */
   bool              Time(const int point,const datetime time) const { return(false); }

   /**
    * @brief 禁止获取价格坐标（固定标签不绑定价格，此方法仅返回父类默认值）
    * @param point [in] 无效参数
    * @return double - 父类默认价格值（无实际意义）
    */
   double            Price(const int point) const { return(CChartObjectText::Price(point)); }

   /**
    * @brief 禁止设置价格坐标（固定标签位置由屏幕像素决定，此方法始终返回 false）
    * @param point [in] 无效参数
    * @param price [in] 无效参数
    * @return bool - 操作结果：始终返回 false
    */
   bool              Price(const int point,const double price) const { return(false); }

   //--- 固定标签创建接口
   /**
    * @brief 在指定图表创建固定标签对象（绑定到屏幕像素位置）
    * @param chart_id [in] 目标图表 ID
    * @param name [in] 标签唯一名称
    * @param window [in] 子窗口编号
    * @param X [in] 相对于基准角的 X 距离（像素，基准角默认左上角）
    * @param Y [in] 相对于基准角的 Y 距离（像素）
    * @return bool - 操作结果：true 表示创建成功（对象创建+绑定+位置设置完成），false 表示失败
    * @note 创建后需通过 Description() 方法设置标签文本内容，默认基准角为左上角（CORNER_LEFT_UPPER）
    */
   bool              Create(long chart_id,const string name,const int window,const int X,const int Y);

   /**
    * @brief 获取固定标签对象类型（MQL5 预定义类型）
    * @return int - 对象类型标识（返回 OBJ_LABEL，代表固定标签对象）
    */
   virtual int       Type(void) const { return(OBJ_LABEL); }

   //--- 序列化接口（重写父类方法，扩展固定位置属性的读写）
   /**
    * @brief 将标签参数（含位置属性）保存到文件
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示保存成功，false 表示失败
    * @note 保存内容：父类文本样式属性 + X 距离（X_Distance） + Y 距离（Y_Distance） + 基准角（Corner）
    */
   virtual bool      Save(const int file_handle);

   /**
    * @brief 从文件加载标签参数（含位置属性）
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示加载成功，false 表示失败
    */
   virtual bool      Load(const int file_handle);
  };

//+------------------------------------------------------------------+
//| CChartObjectEdit 类（文本输入框对象）                            |
//| 功能：MQL5 图表文本输入框工具，用于接收用户输入文本（支持交互操作）     |
//| 继承关系：public CChartObjectLabel（基于固定标签类，扩展输入交互属性）  |
//| 核心特性：                                                      |
//|  1. 固定屏幕位置：复用标签的基准角和 X/Y 距离属性，位置不随图表缩放变化   |
//|  2. 可配置尺寸：支持手动设置输入框宽度和高度（区别于标签的自动尺寸）     |
//|  3. 交互能力：支持用户输入文本、设置只读状态、调整背景/边框颜色          |
//|  4. 输入场景：适用于参数配置（如设置止损比例）、文本输入（如备注信息）    |
//+------------------------------------------------------------------+
class CChartObjectEdit : public CChartObjectLabel
  {
public:
   /**
    * @brief 构造函数：初始化文本输入框对象
    * @details 调用父类 CChartObjectLabel 构造函数，继承固定位置属性，初始化输入交互相关属性
    */
                     CChartObjectEdit(void);

   /**
    * @brief 析构函数：销毁文本输入框对象
    * @details 依赖父类析构逻辑，自动删除图表上的输入框对象，释放资源
    */
                    ~CChartObjectEdit(void);

   //--- 输入框特有属性接口（尺寸、样式、交互状态）
   /**
    * @brief 设置输入框的宽度（覆盖父类的只读尺寸，支持手动配置）
    * @param X [in] 新宽度（像素，建议 ≥50 像素，确保足够输入空间）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              X_Size(const int X) const;

   /**
    * @brief 获取输入框宽度（重写父类方法，返回手动设置的宽度）
    * @return int - 宽度（像素）
    */
   int               X_Size(void) const { return(CChartObjectLabel::X_Size()); }

   /**
    * @brief 设置输入框的高度（覆盖父类的只读尺寸，支持手动配置）
    * @param Y [in] 新高度（像素，建议 ≥20 像素，匹配字号大小）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              Y_Size(const int Y) const;

   /**
    * @brief 获取输入框高度（重写父类方法，返回手动设置的高度）
    * @return int - 高度（像素）
    */
   int               Y_Size(void) const { return(CChartObjectLabel::Y_Size()); }

   /**
    * @brief 获取输入框背景颜色
    * @return color - 背景颜色（如 clrWhite 表示白色背景，clrNONE 表示透明）
    */
   color             BackColor(void) const;

   /**
    * @brief 设置输入框背景颜色
    * @param new_color [in] 新背景颜色（支持 MQL5 预定义颜色如 clrWhite，或自定义 RGB 颜色如 clr(R, G, B)）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              BackColor(const color new_color) const;

   /**
    * @brief 获取输入框边框颜色
    * @return color - 边框颜色（如 clrGray 表示灰色边框，clrNONE 表示无边框）
    */
   color             BorderColor(void) const;

   /**
    * @brief 设置输入框边框颜色
    * @param new_color [in] 新边框颜色
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              BorderColor(const color new_color) const;

   /**
    * @brief 获取输入框的只读状态
    * @return bool - 状态值：true=只读（用户无法修改输入内容），false=可编辑（用户可输入文本）
    */
   bool              ReadOnly(void) const;

   /**
    * @brief 设置输入框的只读状态
    * @param flag [in] 新状态（true=只读，false=可编辑）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    * @note 只读状态常用于展示不可修改的信息（如计算结果），可编辑状态用于接收用户输入
    */
   bool              ReadOnly(const bool flag) const;

   /**
    * @brief 获取输入框内文本的对齐方式
    * @return ENUM_ALIGN_MODE - 对齐方式枚举值（如 ALIGN_LEFT 表示左对齐，ALIGN_CENTER 表示居中对齐）
    */
   ENUM_ALIGN_MODE   TextAlign(void) const;

   /**
    * @brief 设置输入框内文本的对齐方式
    * @param align [in] 新对齐方式（需为 ENUM_ALIGN_MODE 枚举值）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              TextAlign(const ENUM_ALIGN_MODE align) const;

   //--- 禁止文本旋转（重写父类方法，输入框文本固定水平，屏蔽旋转功能）
   /**
    * @brief 禁止设置文本旋转角度（输入框文本强制水平，此方法始终返回 false）
    * @param angle [in] 无效参数
    * @return bool - 操作结果：始终返回 false
    */
   bool              Angle(const double angle) const { return(false); }

   /**
    * @brief 获取文本旋转角度（输入框文本固定为 0°，返回父类默认值）
    * @return double - 旋转角度：始终为 0°
    */
   double            Angle(void) const { return(CChartObjectLabel::Angle()); }

   //--- 文本输入框创建接口
   /**
    * @brief 在指定图表创建文本输入框对象（固定位置+自定义尺寸）
    * @param chart_id [in] 目标图表 ID
    * @param name [in] 输入框唯一名称
    * @param window [in] 子窗口编号
    * @param X [in] 相对于基准角的 X 距离（像素）
    * @param Y [in] 相对于基准角的 Y 距离（像素）
    * @param sizeX [in] 输入框宽度（像素，建议 ≥50）
    * @param sizeY [in] 输入框高度（像素，建议 ≥20）
    * @return bool - 操作结果：true 表示创建成功（对象创建+绑定+位置+尺寸设置完成），false 表示失败
    * @note 创建后默认状态为“可编辑”，可通过 ReadOnly() 方法切换为只读
    */
   bool              Create(long chart_id,const string name,const int window,const int X,const int Y,const int sizeX,const int sizeY);

   /**
    * @brief 获取文本输入框对象类型（MQL5 预定义类型）
    * @return int - 对象类型标识（返回 OBJ_EDIT，代表文本输入框对象）
    */
   virtual int       Type(void) const override { return(OBJ_EDIT); }

   //--- 序列化接口（重写父类方法，扩展输入框特有属性的读写）
   /**
    * @brief 将输入框参数（含尺寸、样式、交互状态）保存到文件
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示保存成功，false 表示失败
    * @note 保存内容：父类标签属性 + 宽度（X_Size） + 高度（Y_Size） + 背景色 + 边框色 + 只读状态 + 文本对齐方式
    */
   virtual bool      Save(const int file_handle) override;

   /**
    * @brief 从文件加载输入框参数（含尺寸、样式、交互状态）
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示加载成功，false 表示失败
    */
   virtual bool      Load(const int file_handle) override;
  };

//+------------------------------------------------------------------+
//| CChartObjectButton 类（交互按钮对象）                            |
//| 功能：MQL5 图表交互按钮工具，用于触发自定义操作（如执行策略、重置参数）   |
//| 继承关系：public CChartObjectEdit（基于文本输入框类，扩展按钮状态属性）  |
//| 核心特性：                                                      |
//|  1. 复用输入框基础：继承固定位置、自定义尺寸、背景/边框样式等属性        |
//|  2. 按钮状态控制：支持设置“按下/弹起”状态（State），适配交互反馈        |
//|  3. 触发操作能力：需配合图表事件监听（如 OnChartEvent），点击时执行自定义逻辑 |
//|  4. 交互场景：适用于策略控制（如“开始交易”“暂停交易”）、工具功能触发（如“刷新数据”） |
//+------------------------------------------------------------------+
class CChartObjectButton : public CChartObjectEdit
  {
public:
   /**
    * @brief 构造函数：初始化交互按钮对象
    * @details 调用父类 CChartObjectEdit 构造函数，继承输入框属性，初始化按钮状态属性
    */
                     CChartObjectButton(void);

   /**
    * @brief 析构函数：销毁交互按钮对象
    * @details 依赖父类析构逻辑，自动删除图表上的按钮对象，释放资源
    */
                    ~CChartObjectButton(void);

   //--- 按钮特有属性接口（状态控制）
   /**
    * @brief 获取按钮当前状态（按下/弹起）
    * @return bool - 状态值：true=按下状态，false=弹起状态
    * @note 状态变化通常由用户点击触发，需在 OnChartEvent 中监听鼠标点击事件并更新状态
    */
   bool              State(void) const;

   /**
    * @brief 设置按钮状态（手动控制按下/弹起）
    * @param state [in] 新状态（true=按下，false=弹起）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    * @note 可通过此方法实现按钮状态的联动（如点击后自动弹起）
    */
   bool              State(const bool state) const;

   /**
    * @brief 获取交互按钮对象类型（MQL5 预定义类型）
    * @return int - 对象类型标识（返回 OBJ_BUTTON，代表交互按钮对象）
    */
   virtual int       Type(void) const override { return(OBJ_BUTTON); }

   //--- 序列化接口（重写父类方法，扩展按钮状态属性的读写）
   /**
    * @brief 将按钮参数（含状态属性）保存到文件
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示保存成功，false 表示失败
    * @note 保存内容：父类输入框属性 + 按钮状态（State）
    */
   virtual bool      Save(const int file_handle) override;

   /**
    * @brief 从文件加载按钮参数（含状态属性）
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示加载成功，false 表示失败
    */
   virtual bool      Load(const int file_handle) override;
  };

//+------------------------------------------------------------------+
//| CChartObjectRectLabel 类（矩形标签对象）                          |
//| 功能：MQL5 图表矩形标签工具，用于在固定位置添加带矩形背景的文本标注     |
//| 继承关系：public CChartObjectLabel（基于固定标签类，扩展矩形背景属性）  |
//| 核心特性：                                                      |
//|  1. 固定屏幕位置：复用标签的基准角和 X/Y 距离属性，位置不随图表缩放变化   |
//|  2. 矩形背景样式：支持自定义背景颜色、边框类型（实线、虚线等）          |
//|  3. 手动尺寸控制：支持设置矩形标签的宽度和高度，区别于普通标签的自动尺寸   |
//|  4. 强调标注场景：适用于需要突出显示的信息（如重要提示、警告信息、关键参数） |
//+------------------------------------------------------------------+
class CChartObjectRectLabel : public CChartObjectLabel
  {
public:
   /**
    * @brief 构造函数：初始化矩形标签对象
    * @details 调用父类 CChartObjectLabel 构造函数，继承固定位置属性，初始化矩形背景相关属性
    */
                     CChartObjectRectLabel(void);

   /**
    * @brief 析构函数：销毁矩形标签对象
    * @details 依赖父类析构逻辑，自动删除图表上的矩形标签对象，释放资源
    */
                    ~CChartObjectRectLabel(void);

   //--- 矩形标签特有属性接口（尺寸、背景、边框）
   /**
    * @brief 设置矩形标签的宽度（覆盖父类的只读尺寸，支持手动配置）
    * @param X [in] 新宽度（像素，建议 ≥30 像素，确保文本完全显示）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              X_Size(const int X) const;

   /**
    * @brief 获取矩形标签宽度（重写父类方法，返回手动设置的宽度）
    * @return int - 宽度（像素）
    */
   int               X_Size(void) const { return(CChartObjectLabel::X_Size()); }

   /**
    * @brief 设置矩形标签的高度（覆盖父类的只读尺寸，支持手动配置）
    * @param Y [in] 新高度（像素，建议 ≥20 像素，匹配字号大小）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              Y_Size(const int Y) const;

   /**
    * @brief 获取矩形标签高度（重写父类方法，返回手动设置的高度）
    * @return int - 高度（像素）
    */
   int               Y_Size(void) const { return(CChartObjectLabel::Y_Size()); }

   /**
    * @brief 获取矩形标签的背景颜色
    * @return color - 背景颜色（如 clrYellow 表示黄色背景，clrNONE 表示透明）
    */
   color             BackColor(void) const;

   /**
    * @brief 设置矩形标签的背景颜色
    * @param new_color [in] 新背景颜色（建议使用浅色背景+深色文本，提升可读性）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    */
   bool              BackColor(const color new_color) const;

   /**
    * @brief 获取矩形标签的边框类型
    * @return ENUM_BORDER_TYPE - 边框类型枚举值（如 BORDER_FLAT 表示实线边框，BORDER_DASH 表示虚线边框）
    */
   ENUM_BORDER_TYPE  BorderType(void) const;

   /**
    * @brief 设置矩形标签的边框类型
    * @param type [in] 新边框类型（需为 ENUM_BORDER_TYPE 枚举值）
    * @return bool - 操作结果：true 表示设置成功，false 表示失败（未绑定图表）
    * @note 边框类型用于区分不同重要级别的标注（如实线边框表示警告，虚线边框表示提示）
    */
   bool              BorderType(const ENUM_BORDER_TYPE type) const;

   //--- 禁止文本旋转（重写父类方法，矩形标签文本固定水平，屏蔽旋转功能）
   /**
    * @brief 禁止设置文本旋转角度（矩形标签文本强制水平，此方法始终返回 false）
    * @param angle [in] 无效参数
    * @return bool - 操作结果：始终返回 false
    */
   bool              Angle(const double angle) const { return(false); }

   /**
    * @brief 获取文本旋转角度（矩形标签文本固定为 0°，返回父类默认值）
    * @return double - 旋转角度：始终为 0°
    */
   double            Angle(void) const { return(CChartObjectLabel::Angle()); }

   //--- 矩形标签创建接口
   /**
    * @brief 在指定图表创建矩形标签对象（固定位置+自定义尺寸+矩形背景）
    * @param chart_id [in] 目标图表 ID
    * @param name [in] 矩形标签唯一名称
    * @param window [in] 子窗口编号
    * @param X [in] 相对于基准角的 X 距离（像素）
    * @param Y [in] 相对于基准角的 Y 距离（像素）
    * @param sizeX [in] 矩形标签宽度（像素，建议 ≥30）
    * @param sizeY [in] 矩形标签高度（像素，建议 ≥20）
    * @return bool - 操作结果：true 表示创建成功（对象创建+绑定+位置+尺寸设置完成），false 表示失败
    * @note 创建后需通过 Description() 方法设置文本内容，默认边框类型为实线（BORDER_FLAT）
    */
   bool              Create(long chart_id,const string name,const int window,const int X,const int Y,const int sizeX,const int sizeY);

   /**
    * @brief 获取矩形标签对象类型（MQL5 预定义类型）
    * @return int - 对象类型标识（返回 OBJ_RECTANGLE_LABEL，代表矩形标签对象）
    */
   virtual int       Type(void) const { return(OBJ_RECTANGLE_LABEL); }

   //--- 序列化接口（重写父类方法，扩展矩形背景属性的读写）
   /**
    * @brief 将矩形标签参数（含背景、边框属性）保存到文件
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示保存成功，false 表示失败
    * @note 保存内容：父类标签属性 + 宽度（X_Size） + 高度（Y_Size） + 背景色 + 边框类型（BorderType）
    */
   virtual bool      Save(const int file_handle);

   /**
    * @brief 从文件加载矩形标签参数（含背景、边框属性）
    * @param file_handle [in] 文件句柄
    * @return bool - 操作结果：true 表示加载成功，false 表示失败
    */
   virtual bool      Load(const int file_handle);
  };
//+------------------------------------------------------------------+